package bark.sihu.task;

import jakarta.xml.bind.DatatypeConverter;
import org.hq.upvideo.EupVideoTaskType;

import org.hq.tool.GetSpringBean;
import org.hq.util.OkHttps;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

/**
 * 四虎网站 解析 html 数据
 * 将 html 实例化为 java 对象
 *
 */
public class ParseHtmlSiHuTask  extends WebPojoTask {
    Logger logger = LoggerFactory.getLogger(ParseHtmlSiHuTask.class);
    private Document doc;
    private OkHttps http= GetSpringBean.getBean(OkHttps.class);

    public ParseHtmlSiHuTask() {
        this(null);
    }

    public ParseHtmlSiHuTask(WebPojoTask obj) {
        super(obj);
    }
    @Override
    public void run() {
       if (!this.connect()){
           //任务完成 通知服务
           this.ups.taskFinish();
           return;
       }
        //任务类型判断
        switch (eupVideoTaskType) {
            // 解析 四虎网站 分组计算页面数量html 数据
            case PARSE_HTML_SIHU_PAGE_COUNT:
                this.groupPageCount();
                break;
            case PARSE_HTML_SIHU_VIDEO_ITEM:
                this.videoItem();
                break;
        }
        //任务完成 通知服务
        this.ups.taskFinish();


    }

    /**
     * 四虎网站 视频昵称 baseb64 解析
     * base解码（方法一）
     *
     * @param srt 待解码字符串
     * @return 解码字符串
     * @explain DatatypeConverter.java实现
     */
    private String baseb64decode(String srt) throws UnsupportedEncodingException {
        // 非空字符串才进行解码
        if (srt == null && srt.length() < 0) return null;
        //切割字符
        String s = srt.substring(srt.indexOf("('") + 2, srt.indexOf("')"));

        // 解码
        byte[] base64Bytes = DatatypeConverter.parseBase64Binary(s);

        // byte[] 转 String
        return new String(base64Bytes, "utf-8");


    }

    /**
     * 四虎网站html解析 视频条目页面解析
     */
    private void videoItem() {
        try {

            this.connect();
            Elements clearfix = this.doc.getElementsByClass("row col5 clearfix").first().getElementsByTag("dl");
            for (Element item : clearfix) {
                //过滤广告链接
                String id = item.attr("id");
                if (!id.equals("listwoBox")){
                    System.out.println("id = "+id);
                    //视频路径
                    String paths = item.getElementsByTag("a").first().attr("href");
                    System.out.println(paths);
                    //视频图片路径
                    String img = item.getElementsByTag("img").first().attr("data-original");
                    System.out.println(img);

                    //视频昵称
                    String name = item.getElementsByTag("h3").first().data();
                    System.out.println("名称 = "+ baseb64decode(name));
                }
            }
        } catch (Exception e) {
            logger.error("视频条目页面 解析异常");
           // this.ups.taskError(this);
        }


    }

    /**
     * 联网
     */
    private boolean connect() {
        try {
           // this.doc = Jsoup.connect(this.getWebUrl()+this.getTaskPath()).get();
            String req = this.http.getRequestToStringSync(this.getWebUrl() + this.getTaskPath());
            if (req == null) return false;
           this.doc= Jsoup.parse(req);
            return true;
        } catch (IOException e) {
            logger.debug("联网异常");

        }
        return false;
    }

    /**
     * 解析 四虎网站 分组计算页面数量html 数据
     *
     */
    private void groupPageCount() {
       try{


           //Document doc = Jsoup.parse(this.getHtmlData(),"UTF-8");

           //读取下一页的标签位置
           Element pc_pagination = this.doc.getElementsByClass("pc_pagination").first();
           //获取最后一页链接数量
           String href = pc_pagination.getElementsByTag("a").last().attr("href");//获取 a 标签 属性
           // System.out.println(href);
           //切割视频地址
           int count = Integer.parseInt(href.substring(href.indexOf("index_") + 6, href.indexOf(".html")));
           //联网获取网页数量
           ParseHtmlSiHuTask ht = new ParseHtmlSiHuTask(this);
           //添加 联网路径
           ht.setTaskPath(this.getWebUrl()+this.getMenuItemPath()+"index.html");
           // 添加 任务类型
           ht.setEupVideoTaskType(EupVideoTaskType.PARSE_HTML_SIHU_VIDEO_ITEM);
           // 提交任务
           this.ups.submit(ht);
           //计算网页数量
           for (int i = 2; i <= count; i++) {
               ParseHtmlSiHuTask  hti = new ParseHtmlSiHuTask(this);
               // 添加 任务类型
               hti.setEupVideoTaskType(EupVideoTaskType.PARSE_HTML_SIHU_VIDEO_ITEM);
               String  uir = new String();
               uir =uir+this.getWebUrl()+this.getMenuItemPath()+ "index_" + i + ".html";
               //添加 联网路径
               hti.setTaskPath(uir);
               //提交联网任务
             //  this.ups.submit(hti);
               System.out.println(hti.getTaskPath());
           }
           return ;
       } catch (Exception e) {
           // html 解析异常 处理
           logger.error("分组计算页面数量 解析异常");
           //this.ups.taskError(this);
       }
    }
}
